home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9203.ZIP / OOPASM.ZIP / STRINGS.MAC < prev    next >
Text File  |  1990-12-14  |  5KB  |  226 lines

  1. COMMENT    %
  2. ============================================================================
  3. Displays a character by using DOS function call.
  4.  
  5. ===========================================================================%
  6. prtChar    MACRO    Char,Attr,Page,Count
  7.     IFNB    <Page>            ;If given display page
  8.     mov    bh,Page            ;Pass it in bh
  9.     ELSE
  10.     mov    bh,0            ;Otherwise use display page zero
  11.     ENDIF
  12.     IFDIF    <Attr>,<bl>
  13.     mov    bl,Attr            ;Pass attribute in bl
  14.     ENDIF
  15.     mov    ah,9            ;Pass service number in ah
  16.     IFDIF    <Char>,<al>
  17.     mov    al,Char            ;Pass character in al
  18.     ENDIF
  19.     IFNB    <Count>            ;If given character count
  20.     mov    cx,Count        ;Pass number of chars to write in cx
  21.     ELSE
  22.     mov    cx,1            ;Otherwise print one char
  23.     ENDIF
  24.     int    10h
  25.     IFNB    <Count>
  26.     cursorRight
  27.     ENDIF
  28.     ENDM
  29.  
  30.  
  31.  
  32. COMMENT    %
  33. ============================================================================
  34. Writes an ASCIIZ string to the screen.
  35.  
  36. ===========================================================================%
  37. prtStrg    MACRO    StringAddr,Attr,Page
  38.     LOCAL    ps1,ps2
  39.  
  40.     pushf
  41.     cld                ;Clear direction flag
  42.     IFDIF    <StringAddr>,<si>
  43.     mov    si,StringAddr        ;Get string address pointer
  44.     ENDIF
  45. ps1:    lodsb                ;Load a char into al
  46.     cmp    al,0            ;End of string yet?
  47.     je    ps2            ;Yes, so return
  48.     IFNB    <Page>            ;If given display page
  49.     mov    bh,Page            ;Pass it in bh
  50.     ELSE
  51.     mov    bh,0            ;Otherwise use display page zero
  52.     ENDIF
  53.     IFDIF    <Attr>,<bl>
  54.     mov    bl,Attr            ;Pass attribute in bl
  55.     ENDIF
  56.     mov    ah,9            ;Pass service number in ah
  57.     mov    cx,1            ;Pass number of chars in cx
  58.     int    10h
  59.     cursorRight
  60.     jmp    ps1
  61. ps2:    popf
  62.     ENDM
  63.  
  64.  
  65.  
  66. COMMENT    %
  67. ============================================================================
  68. Displays a character by writing to video memory.
  69.  
  70. ===========================================================================%
  71. disChar        MACRO    Row,Col,Attr,Char
  72.         LOCAL    dchr1,dchr2,dchr3,dchr4
  73.  
  74.     IFDIF        <Row>,<al>
  75.     mov        al,Row
  76.     ENDIF
  77.     mov        cl,160            ;Get bytes/row
  78.     mul        cl            ;ax = al * cl
  79.     mov        di,ax            ;Save sub-total
  80.  
  81.     IFDIF        <Col>,<al>
  82.     mov        al,Col
  83.     ENDIF
  84.     mov        cl,2            ;Get bytes/column
  85.     mul        cl            ;ax = al * cl
  86.     add        di,ax            ;Get total # of bytes
  87.  
  88.     IF        Snow
  89.     mov        dx,03DAh        ;Status port addr
  90.     cli                    ;Disable interrupts
  91. dchr1:    in        al,dx            ;Read status port
  92.     and        al,1            ;Wait for horz retrace to end
  93.     jnz        dchr2            ;If in progress
  94. dchr2:    in        al,dx            ;Read status port
  95.     and        al,1            ;Wait for horz retrace
  96.     jz        dchr2            ;To start
  97.     ENDIF
  98.     mov        Bptr es:[di],Char    ;Move char into video seg
  99.     IF        Snow
  100.     sti                    ;Enable interrupts
  101.     ENDIF
  102.  
  103.     IF        Snow
  104.     mov        dx,03DAh        ;Status port addr
  105.     cli                    ;Disable interrupts
  106. dchr3:    in        al,dx            ;Read status port
  107.     and        al,1            ;Wait for horz retrace to end
  108.     jnz        dchr3            ;If in progress
  109. dchr4:    in        al,dx            ;Read status port
  110.     and        al,1            ;Wait for horz retrace
  111.     jz        dchr4            ;To start
  112.     ENDIF
  113.     mov        Bptr es:[di+1],Attr    ;Move attribute into video seg
  114.     IF        Snow
  115.     sti                    ;Enable interrupts
  116.     ENDIF
  117.     ENDM
  118.  
  119.  
  120.  
  121. COMMENT    %
  122. ============================================================================
  123. Displays an ASCIIZ string by writing to video memory.
  124.  
  125. ===========================================================================%
  126. disStrg        MACRO    Row,Col,Attr,StringAddr
  127.         LOCAL    dss1,dss2,dss3,dss4,dss5,dss6
  128.  
  129.     IFDIF        <Row>,<al>
  130.     mov        al,Row
  131.     ENDIF
  132.     mov        cl,160            ;Get bytes/row
  133.     mul        cl            ;ax = al * cl
  134.     mov        di,ax            ;Save sub-total
  135.  
  136.     IFDIF        <Col>,<al>
  137.     mov        al,Col
  138.     ENDIF
  139.     mov        cl,2            ;Get bytes/column
  140.     mul        cl            ;ax = al * cl
  141.     add        di,ax            ;Get total # of bytes
  142.  
  143.     IFDIF        <Attr>,<bl>
  144.     mov        bl,Attr
  145.     ENDIF
  146.     IFDIF        <StringAddr>,<si>
  147.     mov        si,StringAddr
  148.     ENDIF
  149.  
  150. dss1:    lodsb                    ;Load char
  151.     zero        al,dss2            ;Zero? - Exit
  152.     mov        bh,al            ;Save char
  153.     IF        Snow
  154.     mov        dx,03DAh        ;Status port addr
  155.     cli                    ;Disable interrupts
  156. dss3:    in        al,dx            ;Read status port
  157.     and        al,1            ;Wait for horz retrace to end
  158.     jnz        dss3            ;If in progress
  159. dss4:    in        al,dx            ;Read status port
  160.     and        al,1            ;Wait for horz retrace
  161.     jz        dss4            ;To start
  162.     ENDIF
  163.     mov        Bptr es:[di],bh        ;Move char into video seg
  164.     IF        Snow
  165.     sti                    ;Enable interrupts
  166.     ENDIF
  167.     inc        di            ;Point to attribute location
  168.     IF        Snow
  169.     mov        dx,03DAh        ;Status port addr
  170.     cli                    ;Disable interrupts
  171. dss5:    in        al,dx            ;Read status port
  172.     and        al,1            ;Wait for horz retrace to end
  173.     jnz        dss5            ;If in progress
  174. dss6:    in        al,dx            ;Read status port
  175.     and        al,1            ;Wait for horz retrace
  176.     jz        dss6            ;To start
  177.     ENDIF
  178.     mov        Bptr es:[di],bl        ;Move attribute into video seg
  179.     IF        Snow
  180.     sti                    ;Enable interrupts
  181.     ENDIF
  182.     inc        di            ;Point to next char location
  183.     jmp        dss1
  184. dss2:
  185.     ENDM
  186.  
  187.  
  188.  
  189. COMMENT    %
  190. ============================================================================
  191. Displays a given attribute by writing to video memory.
  192.  
  193. ===========================================================================%
  194. disAttr        MACRO    R1,C1,C2,Attr
  195.         LOCAL    dsa1
  196.  
  197.     IFDIF        <ch>,<C2>
  198.     mov        ch,C2
  199.     ENDIF
  200.     sub        ch,C1            ;Get number of columns
  201.  
  202.     IFDIF        <al>,<R1>
  203.     mov        al,R1
  204.     ENDIF
  205.     mov        cl,160            ;Get bytes/row
  206.     mul        cl            ;ax = al * cl
  207.     mov        di,ax            ;Save sub-total
  208.  
  209.     IFDIF        <al>,<C1>
  210.     mov        al,C1
  211.     ENDIF
  212.     mov        cl,2            ;Get bytes/column
  213.     mul        cl            ;ax = al * cl
  214.     add        di,ax            ;Get total # of bytes
  215.  
  216.     IFDIF        <bl>,<Attr>
  217.     mov        bl,Attr
  218.     ENDIF
  219.  
  220.     mov        cl,ch            ;Set up loop counter
  221.     xor        ch,ch
  222. dsa1:    mov        Bptr es:[di+1],bl    ;Move attribute into video seg
  223.     add        di,2            ;Point to next char location
  224.     loop        dsa1
  225.     ENDM
  226.